package br.com.esporte.view.site.component.containerDiaPraticado;

import org.apache.wicket.Component;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.Model;

import br.com.esporte.business.impl.converter.DateConverter;
import br.com.esporte.business.impl.util.DataGeneric;
import br.com.esporte.exception.ViewException;
import br.com.esporte.model.DiaPraticadoGrupo;
import br.com.esporte.model.TipoAdvertenciaEnum;
import br.com.esporte.model.Usuario;
import br.com.esporte.view.site.component.image.ImageRelativePath;
import br.com.esporte.view.site.component.tipoEsporte.TipoEsporteAbstract;
import br.com.esporte.view.site.grupo.comunidade.info.PaginaInfoComunidade;
import br.com.esporte.view.site.grupo.comunidade.partida.PaginaCriarPartida;
import br.com.esporte.view.site.grupo.comunidade.partida.PaginaListarPartida;
import br.com.esporte.view.site.template.util.ConstantsTemplate;

/**
 * 
 * @author Milton Domingues
 *
 */
public class DiaPraticadoGrupoContainer extends TipoEsporteAbstract {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private static final String FORM_ID = "form";
	private static final String MELHOR_ID = "melhor";
	private static final String PIOR_ID = "pior";
	private static final String MAIOR_PONTUADOR_ID = "maiorPontuador";
	private static final String QESTION_IMAGE = "question.png";
	private static final String DATA_ID = "data";
	private static final String LINK_LIST_ID = "linkList";
	private static final String LINK_CRIAR_ID = "linkCriar";
	private static final String PONTOS_ID = "pontos";
	private static final String AZUIS_ID = "azuis";
	private static final String VERMELHOS_ID = "vermelhos";
	private static final String AMARELOS_ID = "amarelos";
	private static final String JOGOS_ID = "jogados";

	private DiaPraticadoGrupo diaPraticado;
	private DataGeneric<Usuario, Integer> melhor;
	private Usuario maiorPontuador;
	private DataGeneric<Usuario, Integer> pior;
	private Integer qtdPartida;
	private Integer qtdPontos;
	private Integer qdtAdvVermelho;
	private Integer qdtAdvAzul;
	private Integer qdtAdvAmarelo;
	private boolean enableCreate;

	public DiaPraticadoGrupoContainer(String id, DiaPraticadoGrupo diaPraticado, DataGeneric<Usuario, Integer> melhor, Usuario maiorPontuador, DataGeneric<Usuario, Integer> pior, Integer qtdPontos, Integer qdtAdvVermelho, Integer qdtAdvAzul, Integer qdtAdvAmarelo, Integer partidas, boolean enableCreate) {
		super(id);
		setEnableCreate(enableCreate);
		setDiaPraticado(diaPraticado);
		setMelhor(melhor);
		setPior(pior);
		setMaiorPontuador(maiorPontuador);
		setQdtAdvAmarelo(qdtAdvAmarelo);
		setQdtAdvAzul(qdtAdvAzul);
		setQdtAdvVermelho(qdtAdvVermelho);
		setQtdPontos(qtdPontos);
		setQtdPartida(partidas);
		montarComponente();
	}

	private Label criarAdvTipo(TipoAdvertenciaEnum tipo, String id, Integer qtd){
		StringBuilder label = new StringBuilder();
		label.append(tipo.getDescricao());
		label.append(" : ");
		label.append(qtd);
		return new Label(id, label.toString());
	}

	private ImageRelativePath criarImagemMaiorPontuador(Usuario usuario){
		ImageRelativePath image = new ImageRelativePath(MAIOR_PONTUADOR_ID, getPathImageUsuario(usuario));
		return image;
	}

	private ImageRelativePath criarImagemMelhor(DataGeneric<Usuario, Integer> usuario){
		ImageRelativePath image = new ImageRelativePath(MELHOR_ID, getPathImageUsuario(usuario.getObject1()));
		return image;
	}

	private ImageRelativePath criarImagemPior(DataGeneric<Usuario, Integer> usuario){
		ImageRelativePath image = new ImageRelativePath(PIOR_ID, getPathImageUsuario(usuario.getObject1()));
		return image;
	}

	private Label criarJogos(Integer qtd){
		StringBuilder label = new StringBuilder();
		label.append("JOGOS : ");
		label.append(qtd);
		return new Label(JOGOS_ID, label.toString());
	}

	private Link<DiaPraticadoGrupo> criarLinkCriar(DiaPraticadoGrupo dia){
		Link<DiaPraticadoGrupo> link = new Link<DiaPraticadoGrupo>(LINK_CRIAR_ID, new Model<DiaPraticadoGrupo>(dia)) {

			private static final long serialVersionUID = -1716628323576702624L;

			@Override
			public void onClick() {
				DiaPraticadoGrupo dia = (DiaPraticadoGrupo) getDefaultModelObject();
				setResponsePage(new PaginaCriarPartida(dia.getGrupo(), dia));
			}
		};
		link.setVisible(isEnableCreate());
		return link;
	}

	private Link<DiaPraticadoGrupo> criarLinkList(DiaPraticadoGrupo dia){
		Link<DiaPraticadoGrupo> link = new Link<DiaPraticadoGrupo>(LINK_LIST_ID, new Model<DiaPraticadoGrupo>(dia)) {

			private static final long serialVersionUID = -1716628323576702624L;

			@Override
			public void onClick() {
				DiaPraticadoGrupo dia = (DiaPraticadoGrupo) getDefaultModelObject();
				try{
					setResponsePage(new PaginaListarPartida(dia.getGrupo(), dia));
				}catch (ViewException e) {
					setResponsePage(new PaginaInfoComunidade(dia.getGrupo(), e.getMessage()));
				}
			}
		};
		return link;
	}

	private Label criarPontos(Integer qtd){
		StringBuilder label = new StringBuilder();
		label.append("GOLS : ");
		label.append(qtd);
		return new Label(PONTOS_ID, label.toString());
	}

	public DiaPraticadoGrupo getDiaPraticado() {
		return diaPraticado;
	}

	public Usuario getMaiorPontuador() {
		return maiorPontuador;
	}

	public DataGeneric<Usuario, Integer> getMelhor() {
		return melhor;
	}

	private String getPathImageUsuario(Usuario usuario){
		StringBuilder path = new StringBuilder();
		if(usuario == null){
			path.append(ConstantsTemplate.CAMINHO_IMAGEM_DIA_PRATICADO);
			path.append(QESTION_IMAGE);
		}else{
			path.append(ConstantsTemplate.CAMINHO_IMAGEM_PERFIL);
			path.append(usuario.getImagem());
		}

		return path.toString();
	}

	public DataGeneric<Usuario, Integer> getPior() {
		return pior;
	}

	public Integer getQdtAdvAmarelo() {
		return qdtAdvAmarelo;
	}

	public Integer getQdtAdvAzul() {
		return qdtAdvAzul;
	}

	public Integer getQdtAdvVermelho() {
		return qdtAdvVermelho;
	}

	public Integer getQtdPartida() {
		return qtdPartida;
	}

	public Integer getQtdPontos() {
		return qtdPontos;
	}

	public boolean isEnableCreate() {
		return enableCreate;
	}

	@Override
	public void montarComponente() {
		Form<Component> form = new Form<Component>(FORM_ID);
		form.add(new Label(DATA_ID, DateConverter.converterDataHoraToString(getDiaPraticado().getDataHoraInicio())));
		form.add(criarImagemMaiorPontuador(getMaiorPontuador()));
		form.add(criarImagemMelhor(getMelhor()));
		form.add(criarImagemPior(getPior()));
		form.add(criarLinkList(getDiaPraticado()));
		form.add(criarLinkCriar(getDiaPraticado()));
		form.add(criarJogos(getQtdPartida()));
		form.add(criarPontos(getQtdPontos()));
		form.add(criarAdvTipo(TipoAdvertenciaEnum.AMARELO, AMARELOS_ID, getQdtAdvAmarelo()));
		form.add(criarAdvTipo(TipoAdvertenciaEnum.AZUL, AZUIS_ID, getQdtAdvAzul()));
		form.add(criarAdvTipo(TipoAdvertenciaEnum.VERMELHO, VERMELHOS_ID, getQdtAdvVermelho()));
		add(form);
	}

	public void setDiaPraticado(DiaPraticadoGrupo diaPraticado) {
		this.diaPraticado = diaPraticado;
	}

	public void setEnableCreate(boolean enableCreate) {
		this.enableCreate = enableCreate;
	}

	public void setMaiorPontuador(Usuario maiorPontuador) {
		this.maiorPontuador = maiorPontuador;
	}

	public void setMelhor(DataGeneric<Usuario, Integer> melhor) {
		this.melhor = melhor;
	}

	public void setPior(DataGeneric<Usuario, Integer> pior) {
		this.pior = pior;
	}

	public void setQdtAdvAmarelo(Integer qdtAdvAmarelo) {
		this.qdtAdvAmarelo = qdtAdvAmarelo;
	}

	public void setQdtAdvAzul(Integer qdtAdvAzul) {
		this.qdtAdvAzul = qdtAdvAzul;
	}

	public void setQdtAdvVermelho(Integer qdtAdvVermelho) {
		this.qdtAdvVermelho = qdtAdvVermelho;
	}

	public void setQtdPartida(Integer qtdPartida) {
		this.qtdPartida = qtdPartida;
	}

	public void setQtdPontos(Integer qtdPontos) {
		this.qtdPontos = qtdPontos;
	}

}
